package controle;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;

import servicos.ClienteRN;
import servicos.FalhaDeDeletarExcepiton;
import servicos.FalhaDeInclusaoException;

import dominio.Cliente;

@ManagedBean(name = "ClienteManagedBean")
public class ClienteManagedBean {

	private ClienteRN cadastro = new ClienteRN();
	private Cliente cliente = new Cliente();
	private List<Cliente> clienteSelecionado = new ArrayList<Cliente>();
	
	private boolean cpf = false;
	private boolean cnpj = false;

	// GET DO CLIENTE
	public Cliente getCliente() {
		return cliente;
	}

	// SET DO CLIENTE
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	// GET E SET DO CPF
	public boolean isCpf() {
		return cpf;
	}

	public void setCpf(boolean cpf) {
		this.cpf = cpf;
	}

	// GET E SET DO CNPJ
	public boolean isCnpj() {
		return cnpj;
	}

	public void setCnpj(boolean cnpj) {
		this.cnpj = cnpj;
	}

	// METODO PARA LISTAR CLIENTES
	public List<Cliente> getListarCliente() {
		try {
			return cadastro.listar();

		} catch (FalhaDeInclusaoException e) {
			e.printStackTrace();

			return null;

		}
	}
	
	// METODO PARA SALVAR CLIENTE
	public String salvarCliente() {
		
		try {
			cadastro.salvar(cliente);
			
			return "/paginas/cliente/cliente_salvo.xhtml";
		} catch (FalhaDeInclusaoException e) {
			e.printStackTrace();
		}
		
		return "falha";
	}

	// METODO PARA DELETAR CLIENTE
	public String deletarCliente() {
		try {

			cadastro.deletar(cliente);

			return "/paginas/cliente/listar_clientes.xhtml";
		} catch (FalhaDeDeletarExcepiton e) {
			e.printStackTrace();
		}
		return "Falha";
	}

	// METODO VISUALIZAR CLIENTE
	public String VisualizarCliente() {

		if (cliente.getCnpj() == null) {
			cnpj = false;
			cpf = true;
		} else {
			cnpj = true;
			cpf = false;
		}

		return "/paginas/cliente/visualizar_cliente.xhtml";
	}

	// METODO QUE QUESTINA A EXCLUSAO DO CLIENTE
	public String confirmarDeletar() {
		if (cliente.getCnpj() == null) {
			cnpj = false;
			cpf = true;

		} else {
			cnpj = true;
			cpf = false;

		}
		return "/paginas/cliente/excluir_cliente.xhtml";
	}

	// METODO PARA ALTERAR CLIENTE
	public String alterarCliente() {
		if (cliente.getCnpj() != null) {
			
			return "/paginas/cliente/alterar_cliente_cnpj.xhtml";

		} else {
			
			return "/paginas/cliente/alterar_cliente_cpf.xhtml";

		}
	}

	// METODO PARA RENDEREIZAR O FORMULARIO DE CPF
	public void escolheCpf(ActionEvent e) {
		cpf = true;
		cnpj = false;
	}

	// METODO PARA RENDERIZAR O FORMULARIO DE CNPJ
	public void escolheCnpj(ActionEvent e) {
		cpf = false;
		cnpj = true;
	}
	
	public List<Cliente> completaNome(String query)
			throws FalhaDeInclusaoException {
		query = query.toUpperCase();
		this.clienteSelecionado = cadastro.listar();
		List<Cliente> sugestao = new ArrayList<Cliente>();
		for (Cliente c : this.clienteSelecionado) {
			if (c.getNomeRazaoSocial().startsWith(query)) {
				sugestao.add(c);
				
			}

		}
		return sugestao;
	}

}
